#include <stdio.h>
#include <stdlib.h>
#include "annotation.h"

void annotationElimination(char *file_input, char *file_output) {
    // 打开文件
    FILE *fp_in, *fp_out;
    if ((fp_in = fopen(file_input, "r")) == NULL) {
        printf("File open error!\n");
        exit(-1);
    }
    if ((fp_out = fopen(file_output, "w")) == NULL) {
        printf("File open error!\n");
        exit(-1);
    }

    // 循环读入处理
    char ch;
    while(1) {
        // 读入
        ch = fgetc(fp_in);

        // 文件结束判断
        if (ch == EOF) {
            break;
        }

        // 注释判断
        else if (ch == '/') {
            ch = fgetc(fp_in);
            // 单行注释
            if (ch == '/') {
                while(((ch = fgetc(fp_in)) != '\n') && ch != EOF);
                fputc('\n', fp_out);
            }
            // 多行注释
            else if (ch == '*') {
                while (1) {
                    while((ch = fgetc(fp_in)) != '*' && ch != EOF);
                    if (ch == EOF) {
                        break;
                    } else {
                        ch = fgetc(fp_in);
                        if (ch == '/') {
                            break;
                        } else {
                            ungetc(ch, fp_in);
                        }
                    }
                }
            }
            // 其他字符
            else {
                fputc('/', fp_out);
                fputc(ch, fp_out);
            } 
        }
        
        // 其他字符
        else {
            fputc(ch, fp_out);
        }
    }

    // 关闭文件
    fclose(fp_in);
    fclose(fp_out);
}